package com.jishuo.nontax.bfc.tlq;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * 接收财政返回消息缓存，用于单据查询时同步检查
 * 只限于单点部署时
 *
 * @author jhb
 */
public class BackMessageCache {
    private static Map<String, Long> msgCache = new HashMap<>();

    /**
     * 添加接收消息
     * @param sn
     */
    public static void setMsg(String sn) {
        long cur = System.currentTimeMillis() / 1000;
        msgCache.put(sn, cur);
        // 为避免定时清理失效，当缓存到达1万条时，强制清理20分钟前的。
        if (msgCache.size() > 2000) clearMsg(20);
    }

    public static Long getMsg(String sn) {
        return msgCache.get(sn);
    }

    /**
     * 删除消息缓存
     * @param sn
     */
    public static void removeMsg(String sn) {
        msgCache.remove(sn);
    }

    /**
     * 清理指定分钟以前的数据
     * @param min 分钟数
     */
    public static void clearMsg(int min) {
        long cur = System.currentTimeMillis() / 1000;
        cur = cur - min * 60;
        Iterator<Map.Entry<String, Long>> it = msgCache.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<String, Long> entry = it.next();
            if (cur > entry.getValue()) it.remove();
        }
    }
}
